import axios, { AxiosInstance, AxiosResponse } from 'axios'

// 创建 axios 实例，使用 Vite 环境变量里的基础地址
const baseURL = import.meta.env.VITE_BASE_URL + 'api' || ''
console.log('==================================================',baseURL);
const instance: AxiosInstance = axios.create({
  baseURL,
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  },
  // 只需要 GET，可不必设置其他全局项
})

// 请求拦截器（无需 token 校验，保持最简）
instance.interceptors.request.use((config) => {
  return config
}, (error) => Promise.reject(error))

// 响应拦截器：仅 200 认为成功，其余抛错信息
instance.interceptors.response.use((response: AxiosResponse) => {
  if (response.status === 200) return response.data
  // 非 200
  return Promise.reject(response.data?.message || `Request failed with status ${response.status}`)
}, (error) => {
  // 统一错误信息
  const msg = error?.response?.data?.message || error?.message || 'Network Error'
  return Promise.reject(msg)
})

// 仅暴露 GET 方法（字符串签名）
export async function get<T = any>(url: string, params?: Record<string, any>): Promise<T> {
  return instance.get(url, { params })
}

// 新增：对象签名 + 选项，支持 request.get({ url, params }, { ignoreCancelToken }) 的用法
export type GetOptions = { ignoreCancelToken?: boolean }
export type GetConfig = { url: string; params?: Record<string, any> }

const request = {
  get<T = any>(config: GetConfig, _options?: GetOptions): Promise<T> {
    const { url, params } = config
    return instance.get(url, { params })
  }
}

export default request